package parte2;

import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

public class TestaAgenda {
	Usuario u;
	Evento e;
	Evento ePassado;
	Evento eFuturo;
	Contato c;
	Contato c2;
	FormaDeContato fdc1sc;
	FormaDeContato fdc2cc;

	@Before
	public void criaObjetos() throws Exception {
	u = new Usuario("Capile", "Cantor famoso",
			"capile@gmail.com");
	e = new Evento("Show na Domus Hall", 14, 03, 2012, 20, 30,
			"2:00:00", "Show espetacular", "Show noturno");
	ePassado = new Evento("Pan 2007", 14, 07, 2007, 8, 30,
			"10:00:00", "Evento Esportivo", "Acontecendo no Brasil");
	eFuturo = new Evento("Copa 2014", 20, 06, 2014, 9, 00,
			"28:00:00", "Evento Esportivo", "Corrente no Brasil");
	c = new Contato("Jair Rodrigues", "Rua do Corcovado", 16, 9);
	c2 = new Contato("Reginaldo Rossi", "Rua do Brega", 18, 11);
	fdc1sc = new FormaDeContato("MSN",
			"jair_rodrigues@hotmail.com");
	fdc2cc = new FormaDeContato("Gmail",
			"jair_rodrigues@gmail.com", "Gmail de Jair");
	}
	
	@Test
	public void TestaEvento() {
		Evento e1 = new Evento("Niver de Fulano", 27, 10, 2011, 19, 30,
				"02:30:00", "blablabla", "Aniversario");
		System.out.println(e1.getDataInicial().getTime());
		System.out.println(e1.getDataFinal().getTime());
	}

	@Test
	public void AgendaTest() throws Exception {
		System.out.println(c.getAniversario().toString());

		// * Testes da classe Usuario
		Assert.assertEquals("Nome do usuario errado", "Capile", u.getNome());
		Assert.assertEquals("Descricao errada", "Cantor famoso",
				u.getDescricao());
		Assert.assertEquals("Email errado", "capile@gmail.com", u.getEmail());
		u.setNome("Beto Barbosa");
		Assert.assertEquals("Nome do usuario errado", "Beto Barbosa",
				u.getNome());
		u.setDescricao("Rei da lambada");
		Assert.assertEquals("Descricao errada", "Rei da lambada",
				u.getDescricao());
		u.setEmail("betobarbosa@gmail.com");
		Assert.assertEquals("Email errado", "betobarbosa@gmail.com",
				u.getEmail());
		u.setNome("Capile"); // +Modificando pra definicao inicial
		u.setDescricao("Cantor famoso");// +Modificando pra definicao inicial
		u.setEmail("capile@gmail.com");// +Modificando pra definicao incial
		// -Falta testar o calendario default da classe usuario, que no caso
		// sera um metodo
		// -Falta testar os eventos que foram adicionados em listas futuras ou
		// listas passadas

		// * Testes da classe Evento
		Assert.assertEquals("Nome do evento errado", "Show na Domus Hall",
				e.getNome());
		Assert.assertTrue(eFuturo.getDataInicial().after(
				ePassado.getDataInicial())); // +Sintaticamente le-se eFuturo �
												// depois de ePassado... Leitura
												// Correta
		Assert.assertTrue(ePassado.getDataInicial().before(
				eFuturo.getDataInicial())); // +Sintaticamente le-se ePassado �
											// antes de eFuturo... Leitura
											// Correta
		Assert.assertTrue(e.getDataInicial().before(e.getDataFinal()));
		Assert.assertTrue(e.getDataFinal().after(e.getDataInicial()));
		Assert.assertTrue(ePassado.getDataInicial().before(
				ePassado.getDataFinal()));
		Assert.assertTrue(ePassado.getDataFinal().after(
				ePassado.getDataInicial()));
		Assert.assertTrue(eFuturo.getDataInicial().before(
				eFuturo.getDataFinal()));
		Assert.assertTrue(eFuturo.getDataFinal()
				.after(eFuturo.getDataInicial()));
		Assert.assertEquals("Duracao errada", "02:00:00", e.getDuracao()
				.toString());
		Assert.assertEquals("Descricao errada", "Show espetacular",
				e.getDescricao());
		Assert.assertEquals("Tipo errado", "Show noturno", e.getTipo());
		e.setNome("Show na Mastodonte");
		Assert.assertEquals("Nome do evento errado", "Show na Mastodonte",
				e.getNome());
		e.setData(28, 05, 2015, 21, 15); // +Tornando "e" um evento mais
											// adiantado do que eFuturo.
											// CONSERTAR O setData DA CLASSE
											// EVENTO
		// -Falta testar o set da data
		// Assert.assertTrue(e.getData().after(eFuturo.getData())); // +Testando
		// se "e" vem depois de "eFuturo"
		// Assert.assertTrue(eFuturo.getData().before(e.getData())); //
		// +Testando se "eFuturo" vem antes de "e"
		e.setDuracao("3:00:00");
		Assert.assertEquals("Duracao errada", "03:00:00", e.getDuracao()
				.toString());
		e.setDescricao("Show milenar");
		Assert.assertEquals("Descricao errada", "Show milenar",
				e.getDescricao());
		e.setTipo("Show a noite");
		Assert.assertEquals("Tipo errado", "Show a noite", e.getTipo());
		// -Falta testar quando um contato e adicionado em um evento
		e.setNome("Show na Domus Hall"); // +Modificando pra definicao inicial
		e.setData(14, 03, 2012, 20, 30); // +Modificando pra definicao inicial
		e.setDuracao("2:00:00"); // +Modificando pra definicao inicial
		e.setDescricao("Show espetacular"); // +Modificando pra definicao
											// inicial
		e.setTipo("Show noturno");
		// -Falta testar quando um Evento nao tem tipo

		// * Testes da classe Contato
		Assert.assertEquals("Nome do contato errado", "Jair Rodrigues",
				c.getNome());
		Assert.assertEquals("Nome do endereco errado", "Rua do Corcovado",
				c.getEndereco());
		// Assert.assertEquals("PrintOut do toString esta errrado", "Nome: " +
		// "Jair Rodrigues" + ";\nEndereco: " + "Rua do Corcovado" + ";",
		// c.toString());
		c.setNome("Tim Maia");
		Assert.assertEquals("Nome do contato errado", "Tim Maia", c.getNome());
		c.setEndereco("Rua do Pao de Acucar");
		Assert.assertEquals("Nome do endereco errado", "Rua do Pao de Acucar",
				c.getEndereco());
		// Assert.assertEquals("PrintOut do toString esta errrado", "Nome: " +
		// "Tim Maia" + ";\nEndereco: " + "Rua do Pao de Acucar" + ";",
		// c.toString());
		c.setNome("Jair Rodrigues"); // +Modificando pra definicao inicial
		c.setEndereco("Rua do Corcovado"); // +Modificando pra definicao inicial
		//
		// - Testando forma de Contato
		// - Para fdc1sc (Forma de contato sem comentario)
		Assert.assertEquals("Nome da forma de contato errado", "MSN",
				fdc1sc.getNome());
		Assert.assertEquals("Endereco da forma de contato errado",
				"jair_rodrigues@hotmail.com", fdc1sc.getEndereco());
		fdc1sc.setNome("Bol");
		fdc1sc.setEndereco("jair_rodrigues@bol.com.br");
		Assert.assertEquals("Nome da forma de contato errado", "Bol",
				fdc1sc.getNome());
		Assert.assertEquals("Endereco da forma de contato errado",
				"jair_rodrigues@bol.com.br", fdc1sc.getEndereco());
		fdc1sc.setNome("MSN"); // + Modificando pra definicao inicial
		fdc1sc.setEndereco("jair_rodrigues@hotmail.com");// + Modificando pra
															// definicao inicial
		// - Para fdc2cc (Forma de contato 2 com comentario)
		Assert.assertEquals("Nome da forma de contato errada", "Gmail",
				fdc2cc.getNome());
		Assert.assertEquals("Endereco da forma de contato errado",
				"jair_rodrigues@gmail.com", fdc2cc.getEndereco());
		Assert.assertEquals("Comentario da forma de contato errado",
				"Gmail de Jair", fdc2cc.getComentario());
		fdc2cc.setNome("Uol");
		fdc2cc.setEndereco("jair_rodrigues@uol.com.br");
		fdc2cc.setComentario("Uol de Jair");
		Assert.assertEquals("Nome da forma de contato errado", "Uol",
				fdc2cc.getNome());
		Assert.assertEquals("Endereco da forma de contato errrado",
				"jair_rodrigues@uol.com.br", fdc2cc.getEndereco());
		Assert.assertEquals("Comentario da forma de contato errado",
				"Uol de Jair", fdc2cc.getComentario());
		fdc2cc.setNome("Gmail"); // + Modificando pra definicao inicial
		fdc2cc.setEndereco("jair_rodrigues@gmail.com"); // + Modificando pra
														// definicao inicial
		fdc2cc.setComentario("Gmail de Jair"); // + Modificando pra definicao
												// inicial

		// * Testes de adicionar um contato a um evento
		// - Evento "e" recebendo o contato "c"
		Assert.assertTrue(e.addContato(c));
		// - Contato "c2" sendo adicionado ao evento "e"
		Assert.assertTrue(c2.addEvento(e));
		// - Verificando se o contato "c" est� na lista de contatos do evento
		// "e"
		Assert.assertEquals("Contato da lista de contatos errada", "Nome: "
				+ "Jair Rodrigues" + ";\nEndereco: " + "Rua do Corcovado"
				+ ";\n", e.getContatosNoEvento().get(0).toString());
		// - Verificando se o contato "c2" est� na lista de contatos do evento
		// "e"
		Assert.assertEquals("Contato da lista de contatos errada", "Nome: "
				+ "Reginaldo Rossi" + ";\nEndereco: " + "Rua do Brega" + ";\n",
				e.getContatosNoEvento().get(1).toString());
		// - Testando add forma de contato com relacao a "Email"
		Assert.assertTrue(c2.addFormaDeContato("email",
				"reginaldo_rossi@bol.com.br"));
		Assert.assertTrue(c2.addFormaDeContato("email",
				"reginaldo_rossi@gmail.com", "Gmail de Reginaldo Rossi"));
		// - Testando forma de contato com relacao a "Telefone"
		Assert.assertTrue(c2.addFormaDeContato("telefone", "3333-8722"));
		Assert.assertTrue(c2.addFormaDeContato("telefone", "3333-2287",
				"telefone do rei do brega"));
		// - Testando add forma de contato com relacao a qualque outro nome
		Assert.assertTrue(c2.addFormaDeContato("hotmail",
				"reidobrega@hotmail.com"));
		Assert.assertTrue(c2.addFormaDeContato("twitter", "@reginaldo_rossi",
				"twitter do rossi"));
		// Possivelmente falta testar outros metodos dessa classe
		// Outras classes devem ser testadas

	}
}
